# -*-coding:utf-8 -*-
'''
只能提取字符串中的第一个函数
'''

def truncate_at_matching_brace(s):
    # 初始化计数器和找到的第一个 '{' 的索引
    brace_count = 0
    first_brace_index = s.find('{')

    # 如果没有找到 '{'，返回原字符串
    if first_brace_index == -1:
        return s

    for index in range(first_brace_index, len(s)):
        if s[index] == '{':
            brace_count += 1
        elif s[index] == '}':
            brace_count -= 1
        if brace_count == 0:
            return s[:index + 1]

    return s

def extract_substring(data):
    # 找到 'fn' 关键词的位置
    fn_index = data.find('fn')

    if fn_index == -1:
        return data

        # 从 'fn' 前的第一个标点符号后的一个字符开始
    # 找到 'fn' 前的部分
    before_fn = data[:fn_index]

    # 找到最后一个标点符号的位置
    last_punctuation_index = max(before_fn.rfind('.'),
                                 before_fn.rfind(','),
                                 before_fn.rfind(';'),
                                 before_fn.rfind('!'),
                                 before_fn.rfind(':'),
                                 before_fn.rfind("'"),
                                 before_fn.rfind('"'),
                                 before_fn.rfind(']'),
                                 before_fn.rfind('\n'),
                                 before_fn.rfind('?'))

    if last_punctuation_index == -1:
        # 如果没有找到标点符号，从开始位置开始
        start_i = 0
    else:
        start_i = last_punctuation_index + 1  # 从标点符号后的下一个字符开始

    # 提取子字符串
    extracted_substring = data[start_i:].strip()

    # 根据{}找到完整函数
    return truncate_at_matching_brace(extracted_substring)



